package com.medusa.aps.business.modules.security.controller;


import com.medusa.aps.business.common.log.Log;
import com.medusa.aps.business.common.model.resp.Result;
import com.medusa.aps.business.model.pagination.Page;
import com.medusa.aps.business.modules.security.model.input.UserQueryPara;
import com.medusa.aps.business.modules.security.model.output.UserInfoVO;
import com.medusa.aps.business.modules.security.model.output.UserVO;
import com.medusa.aps.business.modules.security.mp.entity.User;
import com.medusa.aps.business.modules.security.mp.service.IUserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * 用户控制层
 *
 * @author yuxh
 **/
@Validated
@Slf4j
@RestController
@RequestMapping("/system/user")
@Tag(name = "用户管理", description = "用户管理")
public class UserController {

    @Resource
    private IUserService userService;


    /**
     * 获取当前登录用户信息
     *
     * @return 用户信息
     */
    @Log("获取当前登录用户信息")
    @GetMapping(value = "/getCurrentUserInfo")
    @Operation(summary = "获取当前登录用户信息")
    public Result<UserInfoVO> getCurrentUserInfo() {
        return Result.ok(userService.getCurrentUserInfo());
    }


    /**
     * 分页查询成员列表
     *
     * @param userQueryPara 查询参数
     * @return 分页查询成员列表
     */
    @GetMapping(value = "/listPage")
    @Operation(summary = "分页查询成员列表")
    public Result<Page<UserVO>> listPage(UserQueryPara userQueryPara) {
        return Result.ok(userService.listPage(userQueryPara));
    }

    /**
     * 获取成员详细信息
     *
     * @param userId 用户id
     * @return 成员详细信息
     */
    @PostMapping(value = "/getById")
    @Operation(summary = "获取成员详细信息")
    public Result<UserVO> getUserById(@RequestParam("userId") Long userId) {
        return Result.ok(userService.getUserById(userId));
    }

    /**
     * 分页查询成员列表基本信息
     *
     * @param userQueryPara 查询参数
     * @return 成员列表基本信息
     */
    @GetMapping(value = "/list")
    @Operation(summary = "分页查询成员列表基本信息")
    public Result<Page<User>> userList(UserQueryPara userQueryPara) {
        return Result.ok(userService.userList(userQueryPara));
    }

    /**
     * 查看用户是否有权限
     *
     * @param phone 手机号
     * @return true or false
     */
    @GetMapping("/hasPermission")
    public Result<Boolean> hasPermission(@RequestParam("phone") String phone) {
        return Result.ok(userService.hasPermission(phone));
    }
}
